package com.example;

import org.junit.Test;

import java.util.*;

public class ListTest {

    @Test
    public void test01() {
        Collection collection = new ArrayList();
        collection.add(1);
        collection.add(1);
        collection.add(2);
        collection.add("3");
        collection.add(new Date());
        String[] arr = {"1", "2", "3"};
        System.out.println(Arrays.toString(arr));
        System.out.println(collection);
        Collection collection1 = new HashSet();
        collection1.add(1);
        collection1.add(1);
        System.out.println(collection1); // 去除重复了
    }

    @Test
    public void test02() {
        /* <Integer>是泛型 */
        /* 泛型确定后，只能存单一类型 */
        List<Integer> list = new ArrayList<>();
        list.add(1); // 往后加一个元素
        list.add(2);
        // 在目标索引位置存入元素，之前的元素往右移
        list.add(0, 0);
        System.out.println(list); // 0, 1, 2
        // 修改目标索引位置的元素
        list.set(1, 10);
        // 删除某个索引上的元素
        list.remove(1);
        System.out.println(list); // 0, 2
        List<String> list1 = new ArrayList<>();
        list1.add("1");
        list1.add("2");
        list1.add("3");
        list1.remove("3"); // 删除元素
        System.out.println(list1);
        // 通过索引获取元素，返回类型由泛型决定
        Integer i = list.get(0);
        String s = list1.get(0);
        System.out.println(list.size()); // 集合的元素个数
        // 1.增强for循环遍历
        // 0, 2
        for (Integer x : list) {
            if (x == 0) {
                x = 10; // 不会修改原始集合的数据
            }
            System.out.println(x);
        }
        System.out.println(list); // 0, 2
    }

    @Test
    public void test03() {
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        // 2.迭代器遍历
        Iterator<String> iterator = list.iterator();
        // 错误的判断删除
//        while (iterator.hasNext()) {
//            String temp = iterator.next();
//            if (temp.equals("1")) {
//                list.remove(temp);
//            }
//            System.out.println(temp);
//        }
//        System.out.println(list); // 2, 3
        // 正确的判断删除
        list.removeIf(x -> x.equals("1"));
        System.out.println(list);
        System.out.println(list.contains("1")); // false
        System.out.println(list.indexOf("3")); // 1
    }

    @Test
    public void test04() {
        LinkedList<String> list = new LinkedList<>();
        // list能够使用的方法是List接口里面定义的方法
        // list使用的方法实现是LinkedList类当中的方法实现
        list.add("1");
        list.add("2");
        System.out.println(list.get(0));
        list.addFirst("a");
        list.addLast("b");
    }

    /* ArrayList查询快，往前或往中间插值非常慢 */
    /* LinkedList查询慢，往前或往中间插值非常快 */
    /* ArrayList应用场景较多 */
    @Test
    public void test05() {
        List<String> list = new ArrayList<>();
        for (int i = 0; i < 1000000; i++) {
            list.add(0, i + "");
        }
    }

    @Test
    public void test06() {
        List<String> list = new LinkedList<>();
        for (int i = 0; i < 1000000; i++) {
            list.add(0, i + "");
        }
    }
}
